home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr15 / rtag10.zip / BOUNC.RTA < prev    next >
Text File  |  1993-05-24  |  2KB  |  75 lines

  1. //  Animation to simulate a bouncing ball.
  2.  
  3. //  File declarations
  4. bfile bounc        // bounc.bat will be the batch driver file
  5. //  Simulation parameters
  6. var numframes = 70    // Number of frames to generate
  7. var endtime = 26.2    // Time at end of simulation
  8. var timestep = .05    // Time for each simulation step
  9. var xstart = -9.2    // Initial X position of ball.
  10. var g = .6        // Gravitational acceleration
  11. var drag = .32        // Frictional drag on slide
  12. var angle = 30        // Downward angle of the slide
  13. //  Variable declarations
  14. var x            // Current x position
  15. var y            // Current y position
  16. var xv            // X velocity
  17. var yv            // Y velocity
  18. var time        // Current simulated time
  19. var frametime        // Generate frame after this much time passes
  20. var nextframetime    // Time when next frame should be displayed
  21. // ----- Executable code -----
  22. //  First time inititlization
  23. // Initial position
  24. x = xstart
  25. frametime = endtime / numframes
  26. //  Begin main simulation loop
  27.    for time=0 while time<endtime step timestep do
  28.     //  See if ball is still on the slide
  29.     if (x <= -5.75) then
  30.         // Ball is still on the slide
  31.         y = 7.43 - (5.75 + x) * tan(angle)
  32.         // Compute next x position
  33.         xv = xv + timestep * g * sin(angle) * drag
  34.         x = x + timestep * xv
  35.         //  Compute y velocity
  36.         yv = -xv * sin(angle)
  37.     else
  38.         // Ball is in free fall
  39.         //  Apply acceleration to get new speed
  40.         yv = yv - timestep * g
  41.         //  Compute new ball position
  42.         y = y + timestep * yv
  43.         //  If ball hit floor, reverse direction & loose energy
  44.         if (y <= 0) then
  45.             print "Hit floor.  time=`time`,  x=`x`,  y=`y`"
  46.             y = 0
  47.             yv = -.75 * yv
  48.         endif
  49.         //  Compute x position.  Note: x velocity is not changing.
  50.         x = x + timestep * xv
  51.         //  Don't let ball go past right side of can
  52.         if (x > 8.2) then
  53.             x = 8.2
  54.         endif
  55.     endif
  56.     // See if it is time to start a new frame
  57.     if (time >= nextframetime) then
  58.         // Start a new frame
  59.         nextframe
  60.         //  Print current ball position
  61.         print "At frame `curframe`, time=`time`, X=`x`, and Y=`y`"
  62.         //  Generate commands to create the include file.
  63.         bwrite "echo #declare xpos = `x` > bounc.inc"
  64.         bwrite "echo #declare ypos = `y` >> bounc.inc"
  65.         //  Generate command to run POV-Ray to render the frame.
  66.         bwrite "call render bounc bounc`###`"
  67.         // Remember when next frame should be produced
  68.         nextframetime = curframe * frametime
  69.     endif
  70. //  End of main simulation loop
  71. endfor
  72. //  Write batch command for end of run processing
  73. epilog
  74. bwrite "dodta BOUNC /S7"
  75.